package cn.iocoder.yudao.core.sensitive.stragegy;

import java.util.Map;
import java.util.function.Function;

public interface ISensitiveStrategy {

    /**
     * @param type  脱敏策略名字
     * @param value 脱敏之前的数据
     * @return 脱敏之后的数据
     */
    default String handle(String type, String value) {
        return this.getStrategyFunctionMap().get(type).apply(value);
    }


    Map<String, Function<String, String>> getStrategyFunctionMap();

    /**
     * 添加自定义脱敏策略
     *
     * @param type     脱敏策略名字
     * @param function 自定义的脱敏逻辑
     */
   default void addStrategy(String type, Function<String, String> function) {

        if (type == null || type.isEmpty()) {
            throw new IllegalArgumentException("脱敏策略名字不能为空");
        }

        if(function==null){
            throw new IllegalArgumentException("function 不能为null");
        }

        Map<String, Function<String, String>> strategyFunctionMap = this.getStrategyFunctionMap();

        if(strategyFunctionMap.containsKey(type)){
            throw new IllegalArgumentException("脱敏策略名字重复，请换一个名字");
        }

        strategyFunctionMap.put(type,function);

    }

}
